session tracks a possible series of input formats and input filenames.
break;
/* specials */
case XT_FILENAME:
- buff = QString().sprintf(fmp.printfc.constData(), wpt->session->filename);
+ buff = QString().sprintf(fmp.printfc.constData(), CSTR(wpt->session->filename));
break;
case XT_FORMAT:
- buff = QString().sprintf(fmp.printfc.constData(), wpt->session->name);
+ buff = QString().sprintf(fmp.printfc.constData(), CSTR(wpt->session->name));
break;
case -1:
if (strncmp(fmp.key.constData(), "LON_10E", 7) == 0) {
float odometer_distance; /* Meters? */
geocache_data* gc_data;
format_specific_data* fs;
- session_t* session; /* pointer to a session struct */
+ const session_t* session; /* pointer to a session struct */
void* extra_data; /* Extra data added by, say, a filter. */
public:
unsigned short cet_converted; /* strings are converted to UTF8; interesting only for input */
gb_color line_color; /* Optional line color for rendering */
int line_width; /* in pixels (sigh). < 0 is unknown. */
- session_t* session; /* pointer to a session struct */
+ const session_t* session; /* pointer to a session struct */
public:
route_head();
cet_convert_init(ivecs->encode, ivecs->fixed_encode); /* init by module vec */
- start_session(ivecs->name, CSTR(fname));
+ start_session(ivecs->name, fname);
ivecs->rd_init(fname);
ivecs->read();
ivecs->rd_deinit();
cet_convert_init(ivecs->encode, 1);
- start_session(ivecs->name, CSTR(qargs.at(0)));
+ start_session(ivecs->name, qargs.at(0));
if (ivecs->rd_init == nullptr) {
fatal("Format does not support reading.\n");
}
if (fname.isEmpty()) {
fatal("An input file (-f) must be specified.\n");
}
- start_session(ivecs->name, CSTR(fname));
+ start_session(ivecs->name, fname);
ivecs->position_ops.rd_init(fname);
}
if (cx != nullptr) {
char* kml = nullptr;
- if (strcmp(wpt->session->name, "kml") == 0) {
+ if (wpt->session->name == QLatin1String("kml")) {
utf_string tmp(true, cx);
cx = kml = strip_html(&tmp);
}
#include "defs.h"
#include "session.h"
-static queue session_list;
-static int session_ct;
+#include <QtCore/QList> // for QList
-static void session_free(session_t* s);
+static QList<session_t> session_list;
void
session_init()
{
- QUEUE_INIT(&session_list);
- session_ct = 0;
+ session_list.clear();
}
void
session_exit()
{
- queue* elem, *tmp;
-
- QUEUE_FOR_EACH(&session_list, elem, tmp) {
- session_t* s = reinterpret_cast<session_t *>(elem);
- dequeue(&s->Q);
- session_free(s);
- }
+ session_list.clear();
}
void
-start_session(const char* name, const char* filename)
+start_session(const QString& name, const QString& filename)
{
- if (session_ct == 0) {
- QUEUE_INIT(&session_list);
- }
- session_ct++;
-
- session_t* s = (session_t*) xcalloc(1, sizeof(*s));
- ENQUEUE_TAIL(&session_list, &s->Q);
- QUEUE_INIT(&s->category_list);
- s->nr = session_ct;
- s->name = name;
- s->filename = xstrdup(filename);
+ session_list.append(session_t(name, filename));
}
-session_t*
+const session_t*
curr_session()
{
- return reinterpret_cast<session_t *>(session_list.prev);
-}
-
-/* in work
-
-int
-session_add_category(const char *name, const int id)
-{
- queue *elem, *tmp;
- session_t *s;
- category_t *c;
-
- s = curr_session();
-
- QUEUE_FOR_EACH(&s->category_list, elem, tmp) {
- c = (category_t *) elem;
- if (case_ignore_strcmp(c->name, name) == 0) {
- if (id >= 0) c->id = id;
- return c->id;
- }
-
- }
-
- c = xmalloc(sizeof(*c));
- c->name = xstrdup(name);
- if (id < 0) c->id = -(++s->unknown_category_ct);
- else c->id = id;
-
- s->category_ct++;
- ENQUEUE_TAIL(&s->category_list, &c->Q);
-
- return c->id;
+ if (!session_list.isEmpty()) {
+ return &session_list.last();
+ } else {
+ fatal("Attempt to fetch session outside of session range.");
+ }
}
-*/
/* non public functions */
-static void
-session_free(session_t* s)
-{
- queue* elem, *tmp;
- QUEUE_FOR_EACH(&s->category_list, elem, tmp) {
- category_t* c = reinterpret_cast<category_t *>(elem);
- dequeue(&c->Q);
- xfree(c);
- }
- xfree(s->filename);
- xfree(s);
-}
#ifndef SESSION_H_INCLUDED_
#define SESSION_H_INCLUDED_
-#include "queue.h"
-
-typedef struct {
- queue Q;
- int id;
- char* name;
-} category_t;
-
-typedef struct {
- queue Q;
- int nr;
- const char* name; /* in normal case the name of a format */
- char* filename; /* used file within format */
- int category_ct;
- int unknown_category_ct; /* added without id */
- queue category_list;
-} session_t;
+#include <QtCore/QString> // for QString
+
+struct session_t {
+public:
+ QString name; /* in normal case the name of a format */
+ QString filename; /* used file within format */
+
+public:
+ session_t(const QString& name_p, const QString& filename_p) : name{name_p},filename{filename_p} {}
+};
void session_init(void);
void session_exit(void);
-void start_session(const char* name, const char* filename);
-session_t* curr_session(void);
-
-/* in work
-int session_add_category(const char *name, const int id);
-*/
+void start_session(const QString& name, const QString& filename);
+const session_t* curr_session(void);
#endif // SESSION_H_INCLUDED_